package cl.portal.escolares.sheduler;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cl.portal.escolares.action.PagoSaveFromTableAction;

/**
 * 
 * @author roomm
 */
public class Mail {
	private static Log _log = LogFactory.getLog(Mail.class);
	// partes del mail declaradas como privadas
	private String user, pass, destino, subject, mensaje, fileName;
	// objeto Propierties donde pondremos los parametros del servidor
	private Properties props;

	// COnstructor de nuestra clase,le pasamos todos los datos, el mensaje,
	// destinatario, etc etc
	public Mail(String vuser, String vpass, String vdestino, String vsubject,
			String vmensaje, String tipo, String vfileName) {
		user = vuser;
		pass = vpass;
		destino = vdestino;
		subject = vsubject;
		mensaje = vmensaje;
		props = new Properties();
		fileName = vfileName;
		/*
		 * el tipo es por si queremos poder enviar a mas de un proveedor de
		 * correo, en nuestro caso solo usaremos gmail.
		 */
		switch (Integer.parseInt(tipo)) {
		case 1:
			setGmailProps();
			break;
		default:
			break;
		}
	}

	// metodo para poner las parametros necesarios
	private void setGmailProps() {
		// el host de correo, en nuestro caso gmail
		props.setProperty("mail.smtp.host", "smtp.gmail.com");
		props.setProperty("mail.smtp.starttls.enable", "true");
		// el puerto que vamos a usar
		props.setProperty("mail.smtp.port", "587");
		// el usuario
		props.setProperty("mail.smtp.user", user);
		// le indicamos que es necesario autentificarse
		props.setProperty("mail.smtp.auth", "true");
	}

	public String send() {
		String retorno;
		try {
			Session session = Session.getDefaultInstance(props);
			Multipart mp = new MimeMultipart();

			
			MimeBodyPart cuerpo = new MimeBodyPart();
			cuerpo.setText(mensaje);
			mp.addBodyPart(cuerpo);
			cuerpo.setHeader("Content-Type","text/html");
			
			if (null != fileName) {
				MimeBodyPart adjunto = new MimeBodyPart();
				DataSource source = new FileDataSource(fileName);
				adjunto.setDataHandler(new DataHandler(source));
				adjunto.setFileName("ComprobantePago.pdf");
				mp.addBodyPart(adjunto);
			}
			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress(user));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					destino));
			message.setSubject(subject);
			message.setContent(mp, "text/html");
			Transport t = session.getTransport("smtp");
			t.connect(user, pass);
			t.sendMessage(message, message.getAllRecipients());
			t.close();
			retorno = "Mail Enviado a: "+destino;
		} catch (Exception e) {
			retorno = e.toString();
		}
		return retorno;
	}

	// GETTERS Y SETTERS

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public Properties getProps() {
		return props;
	}

	public void setProps(Properties props) {
		this.props = props;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

}